--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit d26708eee99c63e79f17f3700fd47968d234fffb
Parents : 6888851
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-07-04T17:13:36-05:00
refactor(format): cleanup code
Changes
5 files changed, 123 insertions(+), 36 deletions(-)
Diff
diff --git a/meshchatx/meshchat.py b/meshchatx/meshchat.py
index 58b9bae2..af44548f 100644
--- a/meshchatx/meshchat.py
+++ b/meshchatx/meshchat.py
@@ -8121,7 +8121,9 @@ class ReticulumMeshChat:
before_seq = None
try:
messages, has_more = hub.room_messages(
- room, limit=limit, before_seq=before_seq,
+ room,
+ limit=limit,
+ before_seq=before_seq,
)
members = hub.members_dict(room)
except ValueError as e:
diff --git a/tests/backend/http_api_response_registry.py b/tests/backend/http_api_response_registry.py
index 839ac0f0..8d2d5960 100644
--- a/tests/backend/http_api_response_registry.py
+++ b/tests/backend/http_api_response_registry.py
@@ -127,20 +127,32 @@ HTTP_JSON_GET_CONTRACTS: tuple[HttpJsonContract, ...] = (
HttpJsonContract("GET", "/api/v1/auth/csrf", CSRF_ENVELOPE_SCHEMA),
HttpJsonContract("GET", "/api/v1/server/security", SERVER_SECURITY_SCHEMA),
HttpJsonContract("GET", "/api/v1/config", CONFIG_ENVELOPE_SCHEMA),
- HttpJsonContract("GET", "/api/v1/blocked-destinations", BLOCKED_DESTINATIONS_ENVELOPE_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/blocked-destinations", BLOCKED_DESTINATIONS_ENVELOPE_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/comports", COMPORTS_ENVELOPE_SCHEMA),
- HttpJsonContract("GET", "/api/v1/system/network-interfaces", SYSTEM_NETWORK_INTERFACES_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/system/network-interfaces", SYSTEM_NETWORK_INTERFACES_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/reticulum/interfaces", INTERFACES_LIST_SCHEMA),
- HttpJsonContract("GET", "/api/v1/community-interfaces", COMMUNITY_INTERFACES_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/community-interfaces", COMMUNITY_INTERFACES_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/reticulum/discovery", DISCOVERY_CONFIG_SCHEMA),
- HttpJsonContract("GET", "/api/v1/reticulum/discovered-interfaces", DISCOVERED_INTERFACES_SCHEMA),
- HttpJsonContract("GET", "/api/v1/reticulum/config/raw", RETICULUM_CONFIG_RAW_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/reticulum/discovered-interfaces", DISCOVERED_INTERFACES_SCHEMA
+ ),
+ HttpJsonContract(
+ "GET", "/api/v1/reticulum/config/raw", RETICULUM_CONFIG_RAW_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/reticulum/blackhole", BLACKHOLE_STATUS_SCHEMA),
HttpJsonContract("GET", "/api/v1/interface-stats", INTERFACE_STATS_SCHEMA),
HttpJsonContract("GET", "/api/v1/path-table", PATH_TABLE_SCHEMA),
HttpJsonContract("GET", "/api/v1/licenses", LICENSES_ENVELOPE_SCHEMA),
HttpJsonContract("GET", "/api/v1/docs/status", DOCS_STATUS_SCHEMA),
- HttpJsonContract("GET", "/api/v1/docs/search", DOCS_SEARCH_SCHEMA, query={"q": "reticulum"}),
+ HttpJsonContract(
+ "GET", "/api/v1/docs/search", DOCS_SEARCH_SCHEMA, query={"q": "reticulum"}
+ ),
HttpJsonContract("GET", "/api/v1/meshchatx-docs/list", MESHCHATX_DOCS_LIST_SCHEMA),
HttpJsonContract(
"GET",
@@ -168,12 +180,23 @@ HTTP_JSON_GET_CONTRACTS: tuple[HttpJsonContract, ...] = (
HttpJsonContract("GET", "/api/v1/debug/logs", DEBUG_LOGS_SCHEMA),
HttpJsonContract("GET", "/api/v1/debug/access-attempts", ACCESS_ATTEMPTS_SCHEMA),
HttpJsonContract("GET", "/api/v1/diagnostics/memory", MEMORY_DIAGNOSTICS_SCHEMA),
- HttpJsonContract("GET", "/api/v1/diagnostics/memory/heap", MEMORY_DIAGNOSTICS_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/diagnostics/memory/heap", MEMORY_DIAGNOSTICS_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/diagnostics/memory/gc", MEMORY_DIAGNOSTICS_SCHEMA),
- HttpJsonContract("GET", "/api/v1/diagnostics/memory/referrers", MEMORY_DIAGNOSTICS_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/diagnostics/memory/referrers", MEMORY_DIAGNOSTICS_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/identities", IDENTITIES_LIST_SCHEMA),
- HttpJsonContract("GET", "/api/v1/identity/backup/base32", IDENTITY_BACKUP_BASE32_SCHEMA),
- HttpJsonContract("GET", "/api/v1/announce", ANNOUNCE_SINGLE_SCHEMA, query={"aspect": "lxmf.delivery"}),
+ HttpJsonContract(
+ "GET", "/api/v1/identity/backup/base32", IDENTITY_BACKUP_BASE32_SCHEMA
+ ),
+ HttpJsonContract(
+ "GET",
+ "/api/v1/announce",
+ ANNOUNCE_SINGLE_SCHEMA,
+ query={"aspect": "lxmf.delivery"},
+ ),
HttpJsonContract("GET", "/api/v1/announces", ANNOUNCES_LIST_SCHEMA),
HttpJsonContract(
"GET",
@@ -229,11 +252,19 @@ HTTP_JSON_GET_CONTRACTS: tuple[HttpJsonContract, ...] = (
),
HttpJsonContract("GET", "/api/v1/lxmf/conversations", LXMF_CONVERSATIONS_SCHEMA),
HttpJsonContract("GET", "/api/v1/lxmf/folders", LXMF_FOLDERS_SCHEMA),
- HttpJsonContract("GET", "/api/v1/lxmf/conversation-pins", LXMF_CONVERSATION_PINS_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/lxmf/conversation-pins", LXMF_CONVERSATION_PINS_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/lxmf/sieve-filters", LXMF_SIEVE_FILTERS_SCHEMA),
- HttpJsonContract("GET", "/api/v1/lxmf/message-blocklist", LXMF_MESSAGE_BLOCKLIST_SCHEMA),
- HttpJsonContract("GET", "/api/v1/lxmf/propagation-nodes", LXMF_PROPAGATION_NODES_SCHEMA),
- HttpJsonContract("GET", "/api/v1/lxmf/propagation-node/status", LXMF_PROPAGATION_STATUS_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/lxmf/message-blocklist", LXMF_MESSAGE_BLOCKLIST_SCHEMA
+ ),
+ HttpJsonContract(
+ "GET", "/api/v1/lxmf/propagation-nodes", LXMF_PROPAGATION_NODES_SCHEMA
+ ),
+ HttpJsonContract(
+ "GET", "/api/v1/lxmf/propagation-node/status", LXMF_PROPAGATION_STATUS_SCHEMA
+ ),
HttpJsonContract(
"GET",
"/api/v1/lxmf-messages/conversation/{destination_hash}",
@@ -260,7 +291,9 @@ HTTP_JSON_GET_CONTRACTS: tuple[HttpJsonContract, ...] = (
HttpJsonContract("GET", "/api/v1/map/mbtiles", MAP_MBTILES_SCHEMA),
HttpJsonContract("GET", "/api/v1/telemetry/peers", TELEMETRY_PEERS_SCHEMA),
HttpJsonContract("GET", "/api/v1/telemetry/tracking", TELEMETRY_TRACKING_SCHEMA),
- HttpJsonContract("GET", "/api/v1/telemetry/trusted-peers", TELEMETRY_TRUSTED_PEERS_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/telemetry/trusted-peers", TELEMETRY_TRUSTED_PEERS_SCHEMA
+ ),
HttpJsonContract(
"GET",
"/api/v1/telemetry/latest/{destination_hash}",
@@ -325,27 +358,43 @@ HTTP_JSON_GET_CONTRACTS: tuple[HttpJsonContract, ...] = (
HttpJsonContract("GET", "/api/v1/bots/status", BOTS_STATUS_SCHEMA),
HttpJsonContract("GET", "/api/v1/bots/subprocess-log", BOTS_SUBPROCESS_LOG_SCHEMA),
HttpJsonContract("GET", "/api/v1/spam-keywords", SPAM_KEYWORDS_SCHEMA),
- HttpJsonContract("GET", "/api/v1/translator/languages", TRANSLATOR_LANGUAGES_SCHEMA),
- HttpJsonContract("GET", "/api/v1/tools/micron-parser-go-release", TOOLS_MICRON_PARSER_RELEASE_SCHEMA),
- HttpJsonContract("GET", "/api/v1/tools/rnode/latest_release", TOOLS_RNODE_LATEST_RELEASE_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/translator/languages", TRANSLATOR_LANGUAGES_SCHEMA
+ ),
+ HttpJsonContract(
+ "GET",
+ "/api/v1/tools/micron-parser-go-release",
+ TOOLS_MICRON_PARSER_RELEASE_SCHEMA,
+ ),
+ HttpJsonContract(
+ "GET", "/api/v1/tools/rnode/latest_release", TOOLS_RNODE_LATEST_RELEASE_SCHEMA
+ ),
HttpJsonContract("GET", "/api/v1/telephone/status", TELEPHONE_STATUS_SCHEMA),
HttpJsonContract("GET", "/api/v1/telephone/history", TELEPHONE_HISTORY_SCHEMA),
- HttpJsonContract("GET", "/api/v1/telephone/recordings", TELEPHONE_RECORDINGS_SCHEMA),
- HttpJsonContract("GET", "/api/v1/telephone/audio-profiles", TELEPHONE_AUDIO_PROFILES_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/telephone/recordings", TELEPHONE_RECORDINGS_SCHEMA
+ ),
+ HttpJsonContract(
+ "GET", "/api/v1/telephone/audio-profiles", TELEPHONE_AUDIO_PROFILES_SCHEMA
+ ),
HttpJsonContract(
"GET",
"/api/v1/telephone/call/{identity_hash}",
TELEPHONE_CALL_SCHEMA,
match_info={"identity_hash": _HEX32},
),
- HttpJsonContract("GET", "/api/v1/telephone/voicemail/status", TELEPHONE_VOICEMAIL_STATUS_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/telephone/voicemail/status", TELEPHONE_VOICEMAIL_STATUS_SCHEMA
+ ),
HttpJsonContract(
"GET",
"/api/v1/telephone/voicemails",
TELEPHONE_VOICEMAILS_ENVELOPE_SCHEMA,
query={"limit": "50", "offset": "0"},
),
- HttpJsonContract("GET", "/api/v1/telephone/ringtones", TELEPHONE_RINGTONES_LIST_SCHEMA),
+ HttpJsonContract(
+ "GET", "/api/v1/telephone/ringtones", TELEPHONE_RINGTONES_LIST_SCHEMA
+ ),
HttpJsonContract(
"GET",
"/api/v1/telephone/ringtones/status",
diff --git a/tests/backend/test_http_api_json_contracts_broad.py b/tests/backend/test_http_api_json_contracts_broad.py
index e3d74be0..911077ff 100644
--- a/tests/backend/test_http_api_json_contracts_broad.py
+++ b/tests/backend/test_http_api_json_contracts_broad.py
@@ -102,14 +102,20 @@ def _validate_body(contract: HttpJsonContract, status: int, body) -> None:
HTTP_JSON_GET_CONTRACTS,
ids=lambda c: f"{c.method} {c.path}",
)
-async def test_get_json_response_matches_schema(contract_app, contract: HttpJsonContract):
+async def test_get_json_response_matches_schema(
+ contract_app, contract: HttpJsonContract
+):
status, body = await invoke_json_contract(contract_app, contract)
_validate_body(contract, status, body)
def test_every_json_get_route_is_registered_or_excluded():
routes = load_route_fixture(_FIXTURE)
- get_api = [r["path"] for r in routes if r["method"] == "GET" and r["path"].startswith("/api/v1")]
+ get_api = [
+ r["path"]
+ for r in routes
+ if r["method"] == "GET" and r["path"].startswith("/api/v1")
+ ]
registered = registered_get_paths()
uncovered = []
for path in get_api:
diff --git a/tests/backend/test_ws_json_contracts.py b/tests/backend/test_ws_json_contracts.py
index ab055c62..0903ff5b 100644
--- a/tests/backend/test_ws_json_contracts.py
+++ b/tests/backend/test_ws_json_contracts.py
@@ -86,6 +86,7 @@ async def test_ws_ping_emits_pong_contract():
client.send_str = AsyncMock(side_effect=capture_send)
with patch("meshchatx.meshchat.AsyncUtils") as mock_async_utils:
+
def run_async(coro):
import asyncio
diff --git a/tests/backend/ws_json_contract_schemas.py b/tests/backend/ws_json_contract_schemas.py
index f9acf115..6aa99044 100644
--- a/tests/backend/ws_json_contract_schemas.py
+++ b/tests/backend/ws_json_contract_schemas.py
@@ -33,8 +33,12 @@ _WS_BOOL = {"type": "boolean"}
WS_MESSAGE_SCHEMAS: dict[str, dict] = {
"ping": _ws_type("ping"),
"pong": _ws_type("pong"),
- "config.set": _ws_type("config.set", required=["config"], properties={"config": _WS_OBJECT}),
- "config": _ws_type("config", required=["config"], properties={"config": _WS_OBJECT}),
+ "config.set": _ws_type(
+ "config.set", required=["config"], properties={"config": _WS_OBJECT}
+ ),
+ "config": _ws_type(
+ "config", required=["config"], properties={"config": _WS_OBJECT}
+ ),
"announced": _ws_type("announced"),
"blocked_destinations": _ws_type(
"blocked_destinations",
@@ -127,7 +131,9 @@ WS_MESSAGE_SCHEMAS: dict[str, dict] = {
required=["success"],
properties={"success": _WS_BOOL},
),
- "announce": _ws_type("announce", required=["announce"], properties={"announce": _WS_OBJECT}),
+ "announce": _ws_type(
+ "announce", required=["announce"], properties={"announce": _WS_OBJECT}
+ ),
"lxmf.delivery": _ws_type("lxmf.delivery"),
"lxmf_message_created": _ws_type(
"lxmf_message_created",
@@ -153,7 +159,9 @@ WS_MESSAGE_SCHEMAS: dict[str, dict] = {
required=["status"],
),
"rrc.change": _ws_type("rrc.change"),
- "rrc.message": _ws_type("rrc.message", required=["message"], properties={"message": _WS_OBJECT}),
+ "rrc.message": _ws_type(
+ "rrc.message", required=["message"], properties={"message": _WS_OBJECT}
+ ),
"rrc.server.change": _ws_type("rrc.server.change"),
"rnsh.session.change": _ws_type("rnsh.session.change"),
"rnsh.output": _ws_type("rnsh.output"),
@@ -168,13 +176,22 @@ WS_MESSAGE_SAMPLES: dict[str, dict] = {
"config.set": {"type": "config.set", "config": {"display_name": "Test"}},
"config": {"type": "config", "config": {"display_name": "Test"}},
"announced": {"type": "announced"},
- "blocked_destinations": {"type": "blocked_destinations", "blocked_destinations": []},
+ "blocked_destinations": {
+ "type": "blocked_destinations",
+ "blocked_destinations": [],
+ },
"keyboard_shortcuts.get": {"type": "keyboard_shortcuts.get"},
"keyboard_shortcuts.set": {"type": "keyboard_shortcuts.set", "shortcuts": {}},
- "keyboard_shortcuts.delete": {"type": "keyboard_shortcuts.delete", "id": "nav_messages"},
+ "keyboard_shortcuts.delete": {
+ "type": "keyboard_shortcuts.delete",
+ "id": "nav_messages",
+ },
"keyboard_shortcuts": {"type": "keyboard_shortcuts", "shortcuts": {}},
"nomadnet.download.cancel": {"type": "nomadnet.download.cancel", "download_id": 1},
- "nomadnet.download.cancelled": {"type": "nomadnet.download.cancelled", "download_id": 1},
+ "nomadnet.download.cancelled": {
+ "type": "nomadnet.download.cancelled",
+ "download_id": 1,
+ },
"nomadnet.page.archives.get": {
"type": "nomadnet.page.archives.get",
"destination_hash": "aa" * 16,
@@ -186,7 +203,10 @@ WS_MESSAGE_SAMPLES: dict[str, dict] = {
"page_path": "/page/index.mu",
"archives": [],
},
- "nomadnet.page.archive.load": {"type": "nomadnet.page.archive.load", "archive_id": 1},
+ "nomadnet.page.archive.load": {
+ "type": "nomadnet.page.archive.load",
+ "archive_id": 1,
+ },
"nomadnet.page.archive.flush": {"type": "nomadnet.page.archive.flush"},
"nomadnet.page.archive.add": {
"type": "nomadnet.page.archive.add",
@@ -212,7 +232,10 @@ WS_MESSAGE_SAMPLES: dict[str, dict] = {
"lxmf.forwarding.rules.get": {"type": "lxmf.forwarding.rules.get"},
"lxmf.forwarding.rules": {"type": "lxmf.forwarding.rules", "rules": []},
"lxmf.forwarding.rule.add": {"type": "lxmf.forwarding.rule.add", "rule": {"id": 1}},
- "lxmf.forwarding.rule.delete": {"type": "lxmf.forwarding.rule.delete", "rule_id": 1},
+ "lxmf.forwarding.rule.delete": {
+ "type": "lxmf.forwarding.rule.delete",
+ "rule_id": 1,
+ },
"lxmf.forwarding.rule.toggle": {
"type": "lxmf.forwarding.rule.toggle",
"rule_id": 1,
@@ -241,11 +264,17 @@ WS_MESSAGE_SAMPLES: dict[str, dict] = {
"identity_switched": {"type": "identity_switched"},
"reticulum_reload_status": {"type": "reticulum_reload_status", "status": "ok"},
"new_voicemail": {"type": "new_voicemail", "id": 1},
- "telephone_ringing": {"type": "telephone_ringing", "remote_identity_hash": "aa" * 16},
+ "telephone_ringing": {
+ "type": "telephone_ringing",
+ "remote_identity_hash": "aa" * 16,
+ },
"telephone_call_established": {"type": "telephone_call_established"},
"telephone_missed_call": {"type": "telephone_missed_call"},
"telephone_call_ended": {"type": "telephone_call_ended"},
- "telephone_initiation_status": {"type": "telephone_initiation_status", "status": "ringing"},
+ "telephone_initiation_status": {
+ "type": "telephone_initiation_status",
+ "status": "ringing",
+ },
"rrc.change": {"type": "rrc.change"},
"rrc.message": {"type": "rrc.message", "message": {"kind": "msg"}},
"rrc.server.change": {"type": "rrc.server.change"},
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────